<?php

//Inclure la class d'accès à la base de données
include_once '../../DBAccess/DBAccess.php';

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of deperditionCeiling
 *
 * @author StdF
 */
class AlgoCeiling {

    public $ti; //Température intérieure
    public $te; //Température extérieure
    public $textra; //Extrapolation - supplément de régulation
    public $tc = 365; //Durée de la période de calcul
    public $ceilingArea; //Surface du plafond
    public $valueU; //Valeur U plafond
    public $reducFactCeiling = 1; //Facteur de réduction pour la valeur U du plafond
    public $totalDeperdition; //Déperdition totale des plafonds
    public $SRE; //Surface de référence énergétique
    public $totalSurface; //Variable pour le calcul de SRE
    

    function getTotalDeperditionCeiling($house) {

        //Récupération de la température extérieure selon la ville de résidence
        $this->te = DBAccess::getExTemp($house->idCity);

        //Récupération du supplément de régulation pour la température ambiante
        $this->textra = DBAccess::getTempExtrapolation($house->year);
        //Température exemple
        $this->ti = $house->roomsTemp;
        $this->ti = $this->ti + $this->textra;

        //Récupération de la surface du toit
        $this->ceilingArea = $this->getCeilingArea($house);
        
        //Récupération de SRE
        $this->SRE = $this->getSRE($house);

            //Test pour savoir si des couches de matériaux existe
            if (!empty($house->ceiling->layers)) {
                $this->valueU = 1/(0.34 + getRtherm($house->ceiling->layers));
                
            } else {
                //Test pour savoir si le plafond a été rénové
                if (!empty($house->ceiling->year)) {
                    //Calcul de la valeur U du plafond si rénové
                    $this->valueU = DBAccess::getValueU_Ceiling($house->ceiling->year);
                }
                else
                    //Calcul de la valeur U du plafond d'après l'année de construction
                    $this->valueU = DBAccess::getValueU_Ceiling($house->year);
            }

            //Calcul de la déperdition du plafond
            $this->totalDeperdition = ($this->ti - $this->te) * $this->tc * $this->ceilingArea * $this->valueU * $this->reducFactCeiling * 86400 / (1000000 * $this->SRE);
            
       return $this->totalDeperdition;
    }
    
    //Calcul de la résistance thermique des couches du plafond
    function getRtherm($layers){
         $Rtherm = 0;

        //Parcours toutes les couches et aditionne les valeurs Rtherm
        foreach ($layers as $value) {

            $Rtherm += $value[0] / 100 / DBAccess::getRthermMat("'" . utf8_decode($value[1]) . "'"); //récupération dans la BD
        }
        return $Rtherm;
    }
    
    //Calcul de la surface du plafond selon la forme et les dimensions de la maison
    function getCeilingArea($house){
        switch ($house->idShape) {
            // Forme carré 
            case 1:
                return $house->M1 * $house->M1;
                break;
            // Forme rectangle 
            case 2:
                return $house->M1 * $house->M2;
                break;

            //Forme en L
            case 3:
                return ($house->M1 * $house->M4) + ($house->M2 - $house->M4) * $house->M3;
                break;

            //Forme en U
            case 4:
                return ($house->M1 * $house->M6) + ($house->M4 * $house->M5) + ($house->M2 - $house->M6) * $house->M3;
                break;

            //Forme rect. décalé
            case 5:
                return ($house->M1 * $house->M2) + $house->M6 * ($house->M7 - $house->M4) + ($house->M4 * $house->M5);
                break;

            //Forme en T
            case 6:
                return ($house->M1 * $house->M2) + ($house->M4 * $house->M5);
                break;

            default :
                echo 'Forme de la maison non connue....';
                break;
        }
    }
    
    
    //Fonction pour le calcul de la surface de référence énergétique (SRE)
    function getSRE($house) {
        switch ($house->idShape) {
            // Forme carré et rectangle
            case 1:
                $this->totalSurface = $house->M1 * $house->M1 * $house->floors;
                break;
            case 2:
                $this->totalSurface = $house->M1 * $house->M2;
                $this->totalSurface *= $house->floors;

                break;
            //Forme en L
            case 3:
                $this->totalSurface = ($house->M1 * $house->M4) + ($house->M2 - $house->M4) * $house->M3;
                $this->totalSurface *= $house->floors;
                break;
            //Forme en U
            case 4:
                $this->totalSurface = ($house->M1 * $house->M6) + ($house->M4 * $house->M5) + ($house->M2 - $house->M6) * $house->M3;
                $this->totalSurface *= $house->floors;
                break;
            //Forme rect. décalé
            case 5:
               $this->totalSurface = ($house->M1 * $house->M2) + $house->M6 * ($house->M7 - $house->M4) + ($house->M4 * $house->M5);
                $this->totalSurface *= $house->floors;
                break;
            //Forme en T
             case 6:
                $this->totalSurface = ($house->M1 * $house->M2) + ($house->M4 * $house->M5);
                $this->totalSurface *= $house->floors;
                break;
            
            default :
                echo 'Forme de la maison non connue....';
                break;
        }

        return $this->totalSurface;
    }


}
?>